package pe.edu.unmsm.fisi.sysllabus.presentacion.controller.procesos;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.event.SelectEvent;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.unmsm.fisi.sysllabus.negocio.modelo.dto.ActualizacionSyllabusDTO;
import pe.edu.unmsm.fisi.sysllabus.negocio.modelo.dto.UsuarioDTO;
import pe.edu.unmsm.fisi.sysllabus.negocio.modelo.dto.VWGrupoCursoDTO;
import pe.edu.unmsm.fisi.sysllabus.negocio.modelo.dto.VWSyllabusDTO;
import pe.edu.unmsm.fisi.sysllabus.negocio.servicio.CursoService;
import pe.edu.unmsm.fisi.sysllabus.negocio.servicio.DocenteService;
import pe.edu.unmsm.fisi.sysllabus.negocio.servicio.SyllabusService;

@Controller
@Scope("view")
public class RegAvanceController {

	private UsuarioDTO usuarioLogueado;
	private List<VWGrupoCursoDTO> grupoCursos;
	private VWGrupoCursoDTO grupoSeleccionado;
	private List<VWSyllabusDTO> syllabusPendientes;
	private List<VWSyllabusDTO> syllabusxConfDeleg;
	private List<VWSyllabusDTO> syllabusTerminados;
	private VWSyllabusDTO syllSeleccionadoP;
	private VWSyllabusDTO syllSeleccionadoCD;
	private VWSyllabusDTO syllSeleccionadoT;
	private ActualizacionSyllabusDTO actualizacionSylEditar;
	private Integer idProfesor;
	private boolean editarTemaSyl;
	
	@Resource
	CursoService cursoService;
	@Resource
	SyllabusService syllService;
	@Resource
	DocenteService docService;
	
	public RegAvanceController() {
		setActualizacionSylEditar(new ActualizacionSyllabusDTO());
		setEditarTemaSyl(false);
	}
	
	@PostConstruct
	private void init(){
		setUsuarioLogueado((UsuarioDTO)FacesContext.getCurrentInstance()
				.getExternalContext().getSessionMap().get("usuarioLogueado"));
		setGrupoCursos(cursoService.listarCursosxDocente(getUsuarioLogueado().getIdUsuario()));
		setIdProfesor(docService.obtenerIdDocentexIdUsuario(getUsuarioLogueado().getIdUsuario()));
	}
	
	public void obtenerSyllabus(SelectEvent sev){
		if(getGrupoSeleccionado().getActualizaSyllabus().equals(1))
			setEditarTemaSyl(true);
		else
			setEditarTemaSyl(false);
		setSyllabusPendientes(syllService.listarAvancesSyllPendientesxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusxConfDeleg(syllService.listarAvancesSyllConfDelegxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusTerminados(syllService.listarAvancesSyllTerminadosxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
	}
	
	/*public void guardarActualizacionSyllabus(ActionEvent ev){
		ActualizacionSyllabusDTO avance=new ActualizacionSyllabusDTO();
		avance.setIdSyllabus(getSyllSeleccionadoP().getIdSyllabus());
		avance.setIdGrupo(getGrupoSeleccionado().getIdGrupCurCronograma());
		avance.setCheckProfesor(0);
		avance.setObsProfesor("");
		syllService.guardarAvanceProfeSyllabus(avance);
	}*/
	
	public void editarAvanceSyll(){
		setActualizacionSylEditar(syllService.obtenerAvancexSyllabus(getSyllSeleccionadoP().getIdAvanceSyl()));
		if(getActualizacionSylEditar()==null)
			setActualizacionSylEditar(new ActualizacionSyllabusDTO());		
	}
	public void guardarTemaSyllabus(ActionEvent ev){
		getActualizacionSylEditar().setIdSyllabus(getSyllSeleccionadoP().getIdSyllabus());
		getActualizacionSylEditar().setIdGrupo(getGrupoSeleccionado().getIdGrupCurCronograma());
		syllService.guardarAvanceProfeSyllabus(getActualizacionSylEditar());
		
		setSyllabusPendientes(syllService.listarAvancesSyllPendientesxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusxConfDeleg(syllService.listarAvancesSyllConfDelegxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusTerminados(syllService.listarAvancesSyllTerminadosxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
	}
	
	public void enviarADelegado(ActionEvent ev){
		String msje=syllService.terminarAvancexProfesor(getActualizacionSylEditar());
		setSyllabusPendientes(syllService.listarAvancesSyllPendientesxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusxConfDeleg(syllService.listarAvancesSyllConfDelegxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
		setSyllabusTerminados(syllService.listarAvancesSyllTerminadosxGrupo(
				getGrupoSeleccionado().getIdGrupCurCronograma()));
	}
	
	/***************GETTERS AND SETTERS*******************/
	public UsuarioDTO getUsuarioLogueado() {
		return usuarioLogueado;
	}
	
	public void setUsuarioLogueado(UsuarioDTO usuarioLogueado) {
		this.usuarioLogueado = usuarioLogueado;
	}

	public List<VWGrupoCursoDTO> getGrupoCursos() {
		return grupoCursos;
	}

	public void setGrupoCursos(List<VWGrupoCursoDTO> grupoCursos) {
		this.grupoCursos = grupoCursos;
	}

	public VWGrupoCursoDTO getGrupoSeleccionado() {
		return grupoSeleccionado;
	}

	public void setGrupoSeleccionado(VWGrupoCursoDTO grupoSeleccionado) {
		this.grupoSeleccionado = grupoSeleccionado;
	}

	public Integer getIdProfesor() {
		return idProfesor;
	}

	public void setIdProfesor(Integer idProfesor) {
		this.idProfesor = idProfesor;
	}

	public List<VWSyllabusDTO> getSyllabusPendientes() {
		return syllabusPendientes;
	}

	public void setSyllabusPendientes(List<VWSyllabusDTO> syllabusPendientes) {
		this.syllabusPendientes = syllabusPendientes;
	}

	public List<VWSyllabusDTO> getSyllabusxConfDeleg() {
		return syllabusxConfDeleg;
	}

	public void setSyllabusxConfDeleg(List<VWSyllabusDTO> syllabusxConfDeleg) {
		this.syllabusxConfDeleg = syllabusxConfDeleg;
	}

	public List<VWSyllabusDTO> getSyllabusTerminados() {
		return syllabusTerminados;
	}

	public void setSyllabusTerminados(List<VWSyllabusDTO> syllabusTerminados) {
		this.syllabusTerminados = syllabusTerminados;
	}
	public VWSyllabusDTO getSyllSeleccionadoP() {
		return syllSeleccionadoP;
	}

	public void setSyllSeleccionadoP(VWSyllabusDTO syllSeleccionadoP) {
		this.syllSeleccionadoP = syllSeleccionadoP;
	}

	public VWSyllabusDTO getSyllSeleccionadoCD() {
		return syllSeleccionadoCD;
	}

	public void setSyllSeleccionadoCD(VWSyllabusDTO syllSeleccionadoCD) {
		this.syllSeleccionadoCD = syllSeleccionadoCD;
	}

	public VWSyllabusDTO getSyllSeleccionadoT() {
		return syllSeleccionadoT;
	}

	public void setSyllSeleccionadoT(VWSyllabusDTO syllSeleccionadoT) {
		this.syllSeleccionadoT = syllSeleccionadoT;
	}

	public ActualizacionSyllabusDTO getActualizacionSylEditar() {
		return actualizacionSylEditar;
	}

	public void setActualizacionSylEditar(ActualizacionSyllabusDTO actualizacionSylEditar) {
		this.actualizacionSylEditar = actualizacionSylEditar;
	}

	public boolean isEditarTemaSyl() {
		return editarTemaSyl;
	}

	public void setEditarTemaSyl(boolean editarTemaSyl) {
		this.editarTemaSyl = editarTemaSyl;
	}

}
